package com.rmb.service;

import com.rmb.entity.SourceEntity;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.rmb.common.model.response.ResponseResult;
import com.rmb.entity.ResponeRest;
import com.rmb.entity.result.AddDataSourceResult;

/**
 * @Author ZhaoMuYang
 * @Date 2021/1/6 19:35
 */
public interface SourceService {

    /**
     *list
     * @return
     */
    List<SourceEntity> list();

    /**
     * addSource
     * @param sourceEntity
     * @return
     * @throws Exception
     */
    SourceEntity addSource(SourceEntity sourceEntity) throws Exception;

    /**
     * testHeartbeat
     * @param id
     * @return
     */
    ResponseResult testHeartbeat(Long id);

    /**
     * 根据Id回显
     * @param id
     * @param flag
     * @return
     */
    ResponeRest findSourceById(Long id,String flag);

    /**
     * 修改数据源
     * @param sourceEntity
     */
    void update(SourceEntity sourceEntity);

    /**
     * 查询列表
     * @return
     */
    List<SourceEntity> findList();

    /**
     * 回显查询
     * @param id
     * @return
     */
    AddDataSourceResult findById(Long id);

    /**
     * 修改数据源
     * @param sourceEntity
     * @param id
     * @return
     */
    ResponseResult updateDataSource(SourceEntity sourceEntity,Long id);



    /**
     * 删除数据源
     * @param id 根据id删除
     */
    void delte(Long id);

    /**
     * 查询数据
     * @param pageSize 每页条数
     * @param pageNum 当前页数
     * @return 字符串
     */
    String findAlldes(Integer pageSize, Integer pageNum);

    /**
     * 根据分页查询
     * @param pageSize 每页条数
     * @param pageNum 当前页数
     * @return 字符串
     */
    String findPageAll(Integer pageSize, Integer pageNum);

    /**
     * 查询数据
     * @return 数据源集合
     */
    List<SourceEntity> findAll();

    /**
     * 获取数据源
     * @param id 数据源ID
     * @return 实体类
     */
    SourceEntity getsql(Long id);

    /**
     * 查询所有
     * @return
     */
    /**
     * 查询所有数据源
     * @return 数据源集合
     */
    List<Map<String,Object>> findAllDataSource();


    /**
     * 查询指定数据源下数据库
     * @param dataSourceId 数据源ID
     * @return
     */
    List<String> findAllDataBase(Long dataSourceId);

    /**
     * 查询指定数据源所有表
     * @param id 数据源ID
     * @param dataBaseName 数据库名称
     * @return 查询结果
     * @throws SQLException v
     */
    List<String> findTablesByDataSource(Long id,String dataBaseName) throws SQLException;


    /**
     * 查询指定数据源
     * @param dataSourceId 数据源ID
     * @return 数据源实体
     * @throws SQLException sql异常
     */
    SourceEntity getDataSourceById(Long dataSourceId);

    /**
     * 执行sql查询
     * @param dataSourceId 数据库ID
     * @param dataBaseName 数据库名称
     * @param tableName 表名称
     * @param sql sql语句
     * @return 执行结果集合
     */
    List<Map<String, Object>> executeSqlQuery(Long dataSourceId,String dataBaseName,String tableName, String sql);



}
